<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app1">
      app-实例1
      <my-counter></my-counter>
      <he-he></he-he>
    </div>

    <hr />

    <div id="app2">
      app2-实例2
      <!-- 报错：HeHe组件在这里不能用，因为属于app-实例1的局部组件 -->
      <!-- <he-he></he-he> -->
      <my-counter></my-counter>
    </div>

    <script src="./js/vue.js"></script>
    <script>
      // 全局组件，各个Vue实例的模板中都能用
      Vue.component('MyCounter', {
        // 注意点：组件的模板必须包含一个确切的根元素（习惯：上来就先写个DIV）
        // 优先使用ES6的模板字符串，因为可以换行，提高代码可读性
        template: `
          <div>
            count: {{ count }}, <button @click="add"> 加一 </button>
          </div>
        `,
        data() {
          return {
            count: 1,
          };
        },
        methods: {
          add() {
            this.count++;
          },
        },
      });

      var vm = new Vue({
        el: '#app1',
        // 局部组件，只能在注册它的Vue实例的模板中使用
        components: {
          // 键值对，键：组件名，值：组件配置对象
          HeHe: {
            template: `
              <div>
                {{ msg }}
                <my-counter></my-counter>
              </div>
            `,
            data() {
              return { msg: '呵呵哒' };
            },
          },
        },
      });

      var vm2 = new Vue({
        el: '#app2',
      });
    </script>
  </body>
</html>
